import { reactive } from "vue";

/**
 * @description dataInfo 弹窗配置属性
 * @param info 弹窗信息
 * @param imgSrc 弹窗告警图片
 * @param showSomeDetail 是否展示处理框
 * @param bottomBtn 是否展示处理按钮
 * @param WorkerOrder 是否展示工单情况
 */
interface dataInfo {
  data?: {
    title?: string;
    info?: any;
    imgSrc?: string;
    showSomeDetail?: boolean;
    bottomBtn?: boolean;
    WorkerOrder?: boolean;
    active?: any;
  };
}

/**
 * @description dialogOptions 更改弹窗配置属性
 * @param dialogID 弹窗ID
 * @param pathKey 弹窗存在路由关键字
 * @param show 是否展示弹框
 * @param title 弹窗标题
 * @param draggable 弹框是否可以拖动,可以拖动情况下modal与closeOnClickModal应为false
 * @param component 弹窗组件
 * @param Zindex z轴层级
 * @param props 弹窗组件的props属性
 * @param width 弹窗宽度
 * @param visible 弹窗是否可见
 * @param modal 是否为模态框，展示模糊背景
 * @param closeOnClickModal 是否允许点击背景关闭弹窗
 * @param callBack 弹窗关闭时的回调函数
 */

type dialogOptions = {
  dialogID?: string | number;
  pathKey?: string;
  show?: boolean;
  title: string;
  draggable?: boolean;
  Zindex?: number;
  component: any;
  props?: dataInfo;
  width?: string;
  visible?: any;
  modal?: boolean;
  closeOnClickModal?: boolean;
  callBack?: Function;
};
export const dialogList = reactive<dialogOptions[]>([]);

let router: any = null;
export const init = (data: any) => {
  router = data;
};
// Object.assign方法的第一个参数是目标对象，后面的参数都是源对象。

// 注意：如果目标对象与源对象有同名属性，或多个源对象有同名属性，则后面的属性会覆盖前面的属性。
export const addDialog = (options: dialogOptions) => {
  dialogList.push(
    Object.assign(options, {
      visible: true,
      pathKey: router.currentRoute.value.path,
      show: true,
    })
  );
};

export const closeDialog = (
  item?: dialogOptions,
  i?: number,
  args?: any,
  isNativeClose?: boolean
) => {
  dialogList.splice(i, 1);
  if (!isNativeClose) item.callBack && item.callBack(...args);
};
